package org.gary.base.dao;

import java.util.List;

import lengreen.core.interfaces.Entity;

import org.gary.base.model.Category;

/**
 * 
 * @author lengreen
 *
 */
public interface CategoryDao {
	
	/**
	 * 列出Category的所有名称
	 * @return
	 */
	public List<Object[]> list(String whoCategory, String lang); 
	
	/**
	 * 检查name在数据库中是否存在
	 * @param name
	 * @return
	 */
	public int checkNameExist(String name, String lang);
	
	/**
	 * 列出所有顶级类别
	 * @param whoCategory
	 * @param lang
	 * @return
	 */
	public List<Object[]> listParent(String whoCategory, String lang);
	
	/**
	 * 查出是否有关联该类别的产品新闻或者设备
	 * @param categoryId
	 * @param mode 指定产品，新闻，设备
	 * @return
	 */
	public int associateCount(int categoryId, Class<? extends Entity> entity);

	/**
	 * 查出该类别的子类
	 * @param categoryId
	 * @return
	 */
	public <T> T children(int categoryId);
	
	/**
	 * 通过类别id加载xxx
	 * @param <T>
	 * @param entity
	 * @param categoryId
	 * @return
	 */
	public <T> List<T> loadXxxByCategory(Class<T> entity, int categoryId);
	
	/**
	 * 加载一个Category通过name
	 * @param categoryName
	 * @return
	 */
	public Category loadCategoryByName(String categoryName, String lang);
	
	/**
	 * 列出2级Category
	 * @param whoCategory
	 * @return
	 */	
	public List<Category> getList(String whoCategory,Object lang);
}
